【MySQL】ORDER BY - 取得データのソート(並び替え)
MySQLのORDER BYについて解説します。
検証環境
ORDER BY
ORDER BY句は“SELECT文の取得レコード(データ)を任意カラムで並び替える句”です。
基本構文
ORDER BY カラム [ ASC | DESC ]
カラム
の部分に並び替えの基準とするカラム、[ ASC | DESC ]
の部分に昇順はASC、降順はDESCを記述します。
並び替えるカラムが複数個ある場合は、カラム [ ASC | DESC ]
の形式でカンマ(,
)区切りにします。
※ 省略した場合はASC(昇順)が適用されます。
サンプル
mysql> SELECT * FROM items;
+----+-----------+-------+-------+
| id | name | price | stock |
+----+-----------+-------+-------+
| 1 | Apple | 200 | 10 |
| 2 | Orange | 150 | 3 |
| 3 | Pineapple | 1100 | 3 |
| 4 | Grapes | 3500 | 1 |
| 5 | Melon | 3500 | 5 |
+----+-----------+-------+-------+
5 rows in set (0.00 sec)
mysql> SELECT * FROM items
___ih_hl_start
-> ORDER BY price DESC;
___ih_hl_end
+----+-----------+-------+-------+
| id | name | price | stock |
+----+-----------+-------+-------+
| 4 | Grapes | 3500 | 1 |
| 5 | Melon | 3500 | 5 |
| 3 | Pineapple | 1100 | 3 |
| 1 | Apple | 200 | 10 |
| 2 | Orange | 150 | 3 |
+----+-----------+-------+-------+
5 rows in set (0.00 sec)
14行目のORDER BY price DESC
がORDER BY句です。
price
カラムの降順(DESC
)でレコードを並び替えています。
また、ORDER BY句のカラムが複数個ある場合は次のようになります。
mysql> SELECT * FROM items
___ih_hl_start
-> ORDER BY price DESC, stock DESC;
___ih_hl_end
+----+-----------+-------+-------+
| id | name | price | stock |
+----+-----------+-------+-------+
| 5 | Melon | 3500 | 5 |
| 4 | Grapes | 3500 | 1 |
| 3 | Pineapple | 1100 | 3 |
| 1 | Apple | 200 | 10 |
| 2 | Orange | 150 | 3 |
+----+-----------+-------+-------+
5 rows in set (0.00 sec)
2行目がORDER BY句ですが、並び替えのカラムにprice DESC
とstock DESC
の2つがあります。
並び替えのカラムが複数個ある場合は、先頭から順番に並び替えの優先度が高くなります。
上記サンプルの優先度はprice
の降順(DESC
)、次にprice
カラムの値が同じレコード同士はstock
カラムの降順(DESC
)です。